package com.ls.fw.hadoop.client.bean;

import java.io.Serializable;
import java.util.List;


/**
 * 
 * <p></p>
 * @author ls 2013-11-28 下午04:38:44
 * @version V1.0   
 * @modificationHistory=========================逻辑或功能性重大变更记录
 * @modify by user: {修改人} 2013-11-28
 * @modify by reason:{方法名}:{原因}
 */
public class PageBean implements Serializable {
	private static final long serialVersionUID = 1408655727648117820L;
	private int pageNum = 1; // 当前页数
	private int numPerPage ; // 每页显示数量
	private int totalPage; // 总页数
	private long allRow; // 总记录数
	private List<?> list; // 要返回的某一页的记录列表

	/**
	 * 
	 * @param page第几页
	 * @param pageSize页面显示记录数
	 * @param allRow总记录数
	 * @param list某一页的记录列表
	 * @return
	 */
	public static PageBean getInstance(int pageNum, int numPerPage, long allRow,
			List<?> list) {
		int totalPage = 0;
		if(numPerPage<1){
			totalPage = PageBean.countTotalPage((int) allRow, allRow); // 总页数
		}else{
			totalPage = PageBean.countTotalPage(numPerPage, allRow); // 总页数
		} 
		final int currentPage = PageBean.countCurrentPage(pageNum);// 当前页
		PageBean pageBean = new PageBean();
		pageBean.setNumPerPage(numPerPage);
		pageBean.setPageNum(currentPage);
		pageBean.setAllRow(allRow);
		pageBean.setTotalPage(totalPage);
		pageBean.setList(list);
		return pageBean;
	}

	/**
	 * 
	 * @param page
	 *            //第几页
	 * @param pageSize
	 *            //每一页记录数
	 * @param list
	 * @return
	 */
	public static PageBean getInstance(int pageNum, int numPerPage, List<?> list) {
		final int currentPage = PageBean.countCurrentPage(pageNum);// 当前页是第几页
		PageBean pageBean = new PageBean();
		pageBean.setNumPerPage(numPerPage);// 每一页显示的记录数
		pageBean.setPageNum(currentPage);
		pageBean.setList(list);
		return pageBean;
	}

	private PageBean() {

	}

	

	public long getAllRow() {
		return allRow;
	}

	public void setAllRow(long allRow) {
		this.allRow = allRow;
	}

	public int getTotalPage() {
		return totalPage;
	}

	public void setTotalPage(int totalPage) {
		this.totalPage = totalPage;
	}

	/**
	 * 以下判断页的信息,只需getter方法(is方法)即可
	 * 
	 * @return
	 */
	public boolean isFirstPage() {
		return pageNum == 1; // 如是当前页是第1页
	}

	public boolean isLastPage() {
		return pageNum == totalPage; // 如果当前页是最后一页
	}

	public boolean isHasPreviousPage() {
		return pageNum != 1; // 只要当前页不是第1页
	}

	public boolean isHasNextPage() {
		return pageNum != totalPage; // 只要当前页不是最后1页
	}

	/**
	 * KNOW 计算总页数,静态方法,供外部直接通过类名调用
	 * 
	 * @param pageSize
	 *            每页记录数
	 * @param allRow
	 *            总记录数
	 * @return 总页数
	 */
	public static int countTotalPage(final int pageSize, final long allRow) {
		long totalPage = 0;
		if(allRow>0){
			 totalPage = allRow % pageSize == 0 ? allRow / pageSize : allRow
					/ pageSize + 1;
		} 
		return (int) totalPage;
	}

	/**
	 * KNOW 计算当前页开始记录
	 * 
	 * @param pageSize
	 *            每页记录数
	 * @param currentPage
	 *            当前第几页
	 * @return 当前页开始记录号
	 */
	public static int countOffset(final int pageSize, final int currentPage) {
		 int offset = 0;
		 if(currentPage>0&&pageSize>0){
			 offset = pageSize * (currentPage - 1);
		 }
		 return offset;
	}

	/**
	 * KNOW 计算当前页,若为0或者请求的URL中没有" page=",则用1代替
	 * 
	 * @param page
	 *            传入的参数(可能为空,即0,则返回1)
	 * @return 当前页 当前页是第几页
	 */
	public static int countCurrentPage(int page) {
		final int curPage = (page <= 0 ? 1 : page);
		return curPage;
	}

	public List<?> getList() {
		return list;
	}

	public void setList(List<?> list) {
		this.list = list;
	}

	public int getPageNum() {
		return pageNum;
	}

	public void setPageNum(int pageNum) {
		this.pageNum = pageNum;
	} 
	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	public int getNumPerPage() {
		return numPerPage;
	}

	public void setNumPerPage(int numPerPage) {
		this.numPerPage = numPerPage;
	}
}